// 基础响应类型
export interface ResponseInfo<T> {
  code: number;
  data: T;
  message: string;
}

// 字段列定义
export interface FieldColumn {
  comment?: string;
  dataType: DataType;
  name: string;
}

export type DataType = 'BOOL' | 'DOUBLE' | 'FLOAT' | 'INT' | 'STRING' | 'UNDEFINED';
export type StorageEngine = 'ALI_OSS' | 'CURR_DB' | 'MIN_IO' | 'TCE_COS';

// 集合 提交 类型
export interface CollectReq {
  collectionComment?: string; // 集合描述
  collectionName: string;  // 集合名称：
  faceColumns?: FieldColumn[];  // 自定义的人脸属性字段
  namespace: string;    // 命名空间
  replicasNum?: number; // 数据分片中最大的文件个数，默认为0（不限制）,仅对Proxima引擎生效
  sampleColumns?: FieldColumn[]; // 自定义的样本属性字段
  shardsNum?: number;   // 要创建的集合的分片数，默认为0（即系统默认）,仅对Milvus引擎生效
  storageEngine?: StorageEngine; // 保留图片及人脸信息的存储组件,
  storageFaceInfo?: boolean; // 是否保留图片及人脸信息
}
// 集合 返回结果 类型
export interface CollectRepVo {
  collectionComment: string;
  collectionName: string;
  faceColumns: FieldColumn[];
  namespace: string;
  replicasNum: number;
  sampleColumns: FieldColumn[];
  shardsNum: number;
  storageEngine?: string;
  storageFaceInfo: boolean;
}

// key-value 通用
export interface FieldKeyValue {
  key: string;
  value: any;
}

// 样本提交 相关类型
export interface SampleDataReq {
  collectionName: string;       // 集合名称
  namespace: string;            // 命名空间
  sampleData?: FieldKeyValue[]; // 扩展字段
  sampleId: string;             // 样本ID
}

// 样本返回 相关类型
export interface SampleDataRepVo {
  collectionName: string;       // 集合名称
  faces: SimpleFaceRepVo[];     // 人脸数据
  namespace: string;            // 命名空间
  sampleData: FieldKeyValue[];  // 扩展字段
  sampleId: string;             // 样本ID
}

// 样本返回类型 中的 人脸数据
export interface SimpleFaceRepVo {
  faceData: FieldKeyValue[];
  faceId: string;
  faceScore: number;
}

// 人脸 提交 类型
export interface FaceDataReq {
  collectionName: string;   // 集合名称
  faceData:FieldKeyValue[]; // 扩展字段
  faceScoreThreshold?:number;// 人脸质量分数阈值,范围：[0,100]：默认0。当设置为0时，会默认使用当前模型的默认值，该方法为推荐使用方式
  imageBase64: string;      // 图像Base64编码值
  maxConfidenceThresholdWithOtherSample?:number; // 当前样本与其他样本的人脸相似度的最大阈值,范围：[0,100]：默认0。当设置为0时，表示不做类间相似度判断逻辑,开启后对效率有较大影响
  minConfidenceThresholdWithThisSample?:number;  // 当前样本的人脸相似度的最小阈值,范围：[0,100]：默认0。当设置为0时，表示不做类间相似度判断逻辑,开启后对效率有较大影响
  namespace:string;         // 命名空间
  sampleId:string;          // 样本ID
}

// 人脸搜索相关参数 类型
export interface FaceSearchParams {
  collectionName: string; // 集合名称
  namespace: string;  // 空间名称
  faceScoreThreshold: number; // 人脸质量分数阈值 [0,100]：默认0。
  confidenceThreshold:number; // 人脸匹配分数阈值 [-100,100]：默认0
  imageBase64: string; // Base64 encoded image
  limit?: number;  // 最大搜索条数：默认5
  maxFaceNum?: number; //对输入图像中多少个人脸进行检索比对：默认5
}
// m v n 结果
export type SearchResult = {
  faceImage?: string;
  faceScore: number;
  location: [];
  match: MatchDate[];
}
// m v n 匹配数据
export type MatchDate = {
  confidence:number;
  faceData: FieldKeyValue[];
  faceId: string;
  faceScore: number;
  sampleData: FieldKeyValue[];
  sampleId: string;
}
// 1v1比较结果
export type CompareResult= {
  confidence:number; //余弦距离转换后的置信度:[-100,100]，值越大，相似度越高。
  distance:number; //向量欧式距离:>=0
  faceInfo:CompareFace; // 人脸信息
}
// 1v1比较 脸
export type CompareFace={
  faceScoreA:number;
  faceScoreB:number;
  locationA:[];
  locationB:[];
}
